import { Repository } from "typeorm";
import { isNone } from 'st-common-core'
import { RoleEntityPropNameEnum } from "../enums/role-entity-prop-name.enum";
import { RoleEntityPropValLimitConst } from '../consts/role-entity-prop-val-limit.const'
import { Role } from "../entities/Role";

export const RoleVerifyUtil = {
  [RoleEntityPropNameEnum.NAME]: {
    verify: async (role: Role, roleRepository: Repository<Role>) => {
      // 校验角色名称长度
      if (
        isNone(role[RoleEntityPropNameEnum.NAME]) ||
        role[RoleEntityPropNameEnum.NAME].length < RoleEntityPropValLimitConst[RoleEntityPropNameEnum.NAME].minLength ||
        role[RoleEntityPropNameEnum.NAME].length > RoleEntityPropValLimitConst[RoleEntityPropNameEnum.NAME].maxLength
      ) return false;
      // 校验角色名称是否重复
      const rolesFound = await roleRepository.find({
        where: {
          [RoleEntityPropNameEnum.NAME]: role[RoleEntityPropNameEnum.NAME]
        }
      })
      return rolesFound.length === 0 || (rolesFound.length === 1 && rolesFound[0][RoleEntityPropNameEnum.ID] === role[RoleEntityPropNameEnum.ID]);
    },
    message: `角色名称已存在或角色名称长度不在 ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.NAME].minLength} - ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.NAME].maxLength} 个字符之间`
  },
  [RoleEntityPropNameEnum.CODE]: {
    verify: async (role: Role, roleRepository: Repository<Role>) => {
      // 校验角色编码长度
      if (
        isNone(role[RoleEntityPropNameEnum.CODE]) ||
        role[RoleEntityPropNameEnum.CODE].length < RoleEntityPropValLimitConst[RoleEntityPropNameEnum.CODE].minLength ||
        role[RoleEntityPropNameEnum.CODE].length > RoleEntityPropValLimitConst[RoleEntityPropNameEnum.CODE].maxLength
      ) return false;
      // 校验角色编码是否重复
      const rolesFound = await roleRepository.find({
        where: {
          [RoleEntityPropNameEnum.CODE]: role[RoleEntityPropNameEnum.CODE]
        }
      })
      return rolesFound.length === 0 || (rolesFound.length === 1 && rolesFound[0][RoleEntityPropNameEnum.ID] === role[RoleEntityPropNameEnum.ID]);
    },
    message: `角色编码已存在或角色编码长度不在 ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.CODE].minLength} - ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.CODE].maxLength} 个字符之间`
  },
  [RoleEntityPropNameEnum.SORT]: {
    verify: async (role: Role) => {
      return !isNone(role[RoleEntityPropNameEnum.SORT]) &&
        role[RoleEntityPropNameEnum.SORT] >= RoleEntityPropValLimitConst[RoleEntityPropNameEnum.SORT].min &&
        role[RoleEntityPropNameEnum.SORT] <= RoleEntityPropValLimitConst[RoleEntityPropNameEnum.SORT].max;
    },
    message: `角色排序取值的范围应在 ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.SORT].min} - ${RoleEntityPropValLimitConst[RoleEntityPropNameEnum.SORT].max} 之间`
  }
};